a=[1,2]
b=[3,4]
a+b[1, 2, 3, 4]
김보람
April 4, 2022
intro
- 현재 파이썬은 길이가 2인 벡터의 덧셈을 지원하지 않음
- 아래와 같은 기능을 구현하는 함수를 만들고 싶음
[1,2],[3,4] -> [4,6]
- 구현
- test
make myfuns.py
- 생각해보니까 vec2_add는 내가 앞으로 자주 쓸 기능임
- 그런데 현재 사용방법으로는 내가 노트북파일을 새로 만들때마다 def vec2_add(a,b):와 같은 함수를 매번 정의해줘야 하는 불편함이 있다.
해결1
- 자주 사용하는 함수를 myfuns.py에 저장한다. (4주차 수업)
%run myfuns를 실행
준비:“00” -> 커널재시작
해결 2
- 자주 사용하는 함수를 myfuns.py에 저장한다. (4주차 수업)
- import myfuns를 이용
(준비) “00” -> 커널 재시작
-사용방법1
준비: “00” -> 커널재시작
.의 의미: 상위, 하위의 개념!(주의) 아래와 같이 사용 불가능 하다.
NameError: name 'vec2_add' is not defined
- 사용방법2
준비: “00” -> 커널재시작
NameError: name 'myfuns' is not defined
- 사용방법3
준비: “00” -> 커널재시작
- 사용방법4
준비: “00” -> 커널재시작
- 사용방법5
준비: “00” -> 커널재시작
- 사용방법6
준비: “00” -> 커널재시작
(오히려 아래는 실행불가능)
- 잘못된 사용방법1
준비: “00” -> 커널재시작
- 사용방법 7
준비: “00” -> 커널재시작
NameError: name 'vec2_add' is not defined
- mf란 무엇인가?
준비: “00” -> 커널재시작
Type: module String form: <module 'myfuns' from 'C:\\Users\\koinu\\python2022\\myfuns.py'> File: c:\users\koinu\python2022\myfuns.py Docstring: <no docstring>
- Docstring의 내용을 채울 수 있을까?
준비1: myfuns.py의 파일을 수정한다. (큰따옴표 ““” 세개)
준비2: “00”->커널재시작
- myfuns.py는 최초 한번만 import된다.
준비: “00” -> 커널재시작
myfuns.py파일을 열고 함수를 바꾸자.
"""이것은 길이가 2인 벡터이 합 혹은 차를 구하는 모듈입니다."""
def vec2_add(a,b):
print("이것은 myfuns.py에 정의된 함수입니다.")
return [a[0]+b[0], a[1]+b[1]]
def vec2_sub(a,b):
return [a[0]-b[0], a[1]-b[1]]다시 myfuns를 로드하고 위를 실행하여 보자
바뀐내용이 적용되지 않는다.
커널을 다시 시작하고 임포트해보자.
“00” -> 커널재시작
- myfuns.py는 주피너노트북파일과 같은 폴더내에 존재해야 한다.
준비1: “00”->커널재시작
준비2: myfuns.py 을 복사하여 다른 폴더로 이동. 예를들면 IP0403폴더를 만들고 그 폴더안에 myfuns2.py파일을 만들자.
- IP0403 폴더에 있는 myfuns2.py를 실행하기 위해서는 아래와 같이 할 수 있다.
준비: “00” -> 커널재시작
- 아래도 가능하다.
준비: “00” -> 커널재시작
참고로 아래는 모두 정의되지 않음
- 언뜻 생각하면 아래가 가능할 것 같다.
- 하지만 불가능
준비: “00” -> 커널재시작
여기까지는 됨..
- (암기) IP0403 폴더안에 __init__.py라는 파일을 만들고 내용에 아래와 같이 쓰면 가능하다.
준비1: 위의 지침을 따른다.
준비2: “00” -> 커널재시작
컴퓨터 상식
. : 현재폴더를 의미
.. : 상위폴더를 의미
./myfuns.py : 현재폴더안에 있는 myfuns.py를 의미
./IP0403/myfuns2.py : 현재폴더안에 IP0403폴더안의 myfuns2.py를 의미
../myfuns.py : 현재폴더보다 한단계 상위폴더에 있는 myfuns.py를 의미
cd ./IP0403 : 현재 폴더안에 있는 IP0403폴더로 이동해라. (cd IP0403으로 줄여쓸 수 있음)
cd .. 현재 폴더보다 한단계 상위폴더로 이동해라.
따라서 from . import myfuns2는 현재 폴더에서 myfuns2를 찾아서 임포트 하라는 의미로 해석가능
- 의미상으로 보면 아래가 실해아능할 것 같은데 불가능하다.
https://guebin.github.io/IP2022/2022/04/03/(5%EC%A3%BC%EC%B0%A8)-4%EC%9B%942%EC%9D%BC.html#site-packages-(%EC%8B%A4%EC%8A%B5%EA%B8%88%EC%A7%80)
- 모듈의 개념은 아까 살펴본 것과 같다. (import를 하여 생기게 되는 오브젝트)
- 교수님들: 모듈이 모이면 패키지라고 부른다. 그리고 라이브러리는 패키지보다 큰 개념이다.
-그런데 구분이 모호하다.
- python 에서 numpy의 type은 모듈
- 그런데 numpy package라고 검색하면 검색이 된다.
- 심지어 numpy library 라고 해도 검색가능
- 교수님 생각: 넘파이모듈, 넘파이패키지, 넘파이라이브러리 다 맞는 말임
(숙제)